package com.bjut.vendormgrsys.web.dto.other;

import java.util.Objects;

import com.bjut.vendormgrsys.web.dto.user.UserInfo;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import org.springframework.validation.annotation.Validated;
import javax.validation.Valid;

/**
 * PositionInfo
 */
@Validated


public class PositionInfo   {
  @JsonProperty("id")
  private String id = null;

  @JsonProperty("vendorRecommendCount")
  private Integer vendorRecommendCount = null;

  @JsonProperty("salary")
  private Salary salary = null;

  @JsonProperty("number")
  private Integer number = null;

  @JsonProperty("lastUpdated")
  private Long lastUpdated = null;

  @JsonProperty("degree")
  private Degree degree = null;

  @JsonProperty("location")
  private String location = null;

  @JsonProperty("datePublished")
  private Long datePublished = null;

  @JsonProperty("name")
  private String name = null;

  @JsonProperty("principal")
  private String principal = null;

  @JsonProperty("detail")
  private String detail = null;

  @JsonProperty("startDate")
  private String startDate = null;

  @JsonProperty("status")
  private String status = null;

  @JsonProperty("dateCreated")
  private String dateCreated = null;

  @JsonProperty("type")
  private JobType type = null;

  @JsonProperty("weChatPositionType")
  private WeChatPositionType weChatPositionType = null;

  @JsonProperty("enterpriseName")
  private String enterpriseName = null;

  @JsonProperty("workYears")
  private WorkYears workYears = null;

  @JsonProperty("creator")
  private UserInfo creator = null;

  public PositionInfo id(String id) {
    this.id = id;
    return this;
  }

  /**
   * 职位id
   * @return id
   **/
  @Schema(description = "职位id")
  
    public String getId() {
    return id;
  }

  public void setId(String id) {
    this.id = id;
  }

  public PositionInfo vendorRecommendCount(Integer vendorRecommendCount) {
    this.vendorRecommendCount = vendorRecommendCount;
    return this;
  }

  /**
   * 推荐人数
   * @return vendorRecommendCount
   **/
  @Schema(description = "推荐人数")
  
    public Integer getVendorRecommendCount() {
    return vendorRecommendCount;
  }

  public void setVendorRecommendCount(Integer vendorRecommendCount) {
    this.vendorRecommendCount = vendorRecommendCount;
  }

  public PositionInfo salary(Salary salary) {
    this.salary = salary;
    return this;
  }

  /**
   * Get salary
   * @return salary
   **/
  @Schema(description = "")
  
    @Valid
    public Salary getSalary() {
    return salary;
  }

  public void setSalary(Salary salary) {
    this.salary = salary;
  }

  public PositionInfo number(Integer number) {
    this.number = number;
    return this;
  }

  /**
   * 招聘人数
   * @return number
   **/
  @Schema(description = "招聘人数")
  
    public Integer getNumber() {
    return number;
  }

  public void setNumber(Integer number) {
    this.number = number;
  }

  public PositionInfo lastUpdated(Long lastUpdated) {
    this.lastUpdated = lastUpdated;
    return this;
  }

  /**
   * 最后更新日期
   * @return lastUpdated
   **/
  @Schema(description = "最后更新日期")
  
    public Long getLastUpdated() {
    return lastUpdated;
  }

  public void setLastUpdated(Long lastUpdated) {
    this.lastUpdated = lastUpdated;
  }

  public PositionInfo degree(Degree degree) {
    this.degree = degree;
    return this;
  }

  /**
   * Get degree
   * @return degree
   **/
  @Schema(description = "")
  
    @Valid
    public Degree getDegree() {
    return degree;
  }

  public void setDegree(Degree degree) {
    this.degree = degree;
  }

  public PositionInfo location(String location) {
    this.location = location;
    return this;
  }

  /**
   * 工作地点
   * @return location
   **/
  @Schema(description = "工作地点")
  
    public String getLocation() {
    return location;
  }

  public void setLocation(String location) {
    this.location = location;
  }

  public PositionInfo datePublished(Long datePublished) {
    this.datePublished = datePublished;
    return this;
  }

  /**
   * 发布日期(预留)
   * @return datePublished
   **/
  @Schema(description = "发布日期(预留)")
  
    public Long getDatePublished() {
    return datePublished;
  }

  public void setDatePublished(Long datePublished) {
    this.datePublished = datePublished;
  }

  public PositionInfo name(String name) {
    this.name = name;
    return this;
  }

  /**
   * 职位名称
   * @return name
   **/
  @Schema(description = "职位名称")
  
    public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public PositionInfo principal(String principal) {
    this.principal = principal;
    return this;
  }

  /**
   * 职位负责人
   * @return principal
   **/
  @Schema(description = "职位负责人")
  
    public String getPrincipal() {
    return principal;
  }

  public void setPrincipal(String principal) {
    this.principal = principal;
  }

  public PositionInfo detail(String detail) {
    this.detail = detail;
    return this;
  }

  /**
   * 详细信息
   * @return detail
   **/
  @Schema(description = "详细信息")
  
    public String getDetail() {
    return detail;
  }

  public void setDetail(String detail) {
    this.detail = detail;
  }

  public PositionInfo startDate(String startDate) {
    this.startDate = startDate;
    return this;
  }

  /**
   * 开始时间
   * @return startDate
   **/
  @Schema(description = "开始时间")
  
    public String getStartDate() {
    return startDate;
  }

  public void setStartDate(String startDate) {
    this.startDate = startDate;
  }

  public PositionInfo status(String status) {
    this.status = status;
    return this;
  }

  /**
   * 状态:PUBLISHING-发布中
   * @return status
   **/
  @Schema(description = "状态:PUBLISHING-发布中")
  
    public String getStatus() {
    return status;
  }

  public void setStatus(String status) {
    this.status = status;
  }

  public PositionInfo dateCreated(String dateCreated) {
    this.dateCreated = dateCreated;
    return this;
  }

  /**
   * 创建日期
   * @return dateCreated
   **/
  @Schema(description = "创建日期")
  
    public String getDateCreated() {
    return dateCreated;
  }

  public void setDateCreated(String dateCreated) {
    this.dateCreated = dateCreated;
  }

  public PositionInfo type(JobType type) {
    this.type = type;
    return this;
  }

  /**
   * Get type
   * @return type
   **/
  @Schema(description = "")
  
    @Valid
    public JobType getType() {
    return type;
  }

  public void setType(JobType type) {
    this.type = type;
  }

  public PositionInfo weChatPositionType(WeChatPositionType weChatPositionType) {
    this.weChatPositionType = weChatPositionType;
    return this;
  }

  /**
   * Get weChatPositionType
   * @return weChatPositionType
   **/
  @Schema(description = "")
  
    @Valid
    public WeChatPositionType getWeChatPositionType() {
    return weChatPositionType;
  }

  public void setWeChatPositionType(WeChatPositionType weChatPositionType) {
    this.weChatPositionType = weChatPositionType;
  }

  public PositionInfo enterpriseName(String enterpriseName) {
    this.enterpriseName = enterpriseName;
    return this;
  }

  /**
   * 企业名称
   * @return enterpriseName
   **/
  @Schema(description = "企业名称")
  
    public String getEnterpriseName() {
    return enterpriseName;
  }

  public void setEnterpriseName(String enterpriseName) {
    this.enterpriseName = enterpriseName;
  }

  public PositionInfo workYears(WorkYears workYears) {
    this.workYears = workYears;
    return this;
  }

  /**
   * Get workYears
   * @return workYears
   **/
  @Schema(description = "")
  
    @Valid
    public WorkYears getWorkYears() {
    return workYears;
  }

  public void setWorkYears(WorkYears workYears) {
    this.workYears = workYears;
  }

  public PositionInfo creator(UserInfo creator) {
    this.creator = creator;
    return this;
  }

  /**
   * Get creator
   * @return creator
   **/
  @Schema(description = "")
  
    @Valid
    public UserInfo getCreator() {
    return creator;
  }

  public void setCreator(UserInfo creator) {
    this.creator = creator;
  }


  @Override
  public boolean equals(java.lang.Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    PositionInfo positionInfo = (PositionInfo) o;
    return Objects.equals(this.id, positionInfo.id) &&
        Objects.equals(this.vendorRecommendCount, positionInfo.vendorRecommendCount) &&
        Objects.equals(this.salary, positionInfo.salary) &&
        Objects.equals(this.number, positionInfo.number) &&
        Objects.equals(this.lastUpdated, positionInfo.lastUpdated) &&
        Objects.equals(this.degree, positionInfo.degree) &&
        Objects.equals(this.location, positionInfo.location) &&
        Objects.equals(this.datePublished, positionInfo.datePublished) &&
        Objects.equals(this.name, positionInfo.name) &&
        Objects.equals(this.principal, positionInfo.principal) &&
        Objects.equals(this.detail, positionInfo.detail) &&
        Objects.equals(this.startDate, positionInfo.startDate) &&
        Objects.equals(this.status, positionInfo.status) &&
        Objects.equals(this.dateCreated, positionInfo.dateCreated) &&
        Objects.equals(this.type, positionInfo.type) &&
        Objects.equals(this.weChatPositionType, positionInfo.weChatPositionType) &&
        Objects.equals(this.enterpriseName, positionInfo.enterpriseName) &&
        Objects.equals(this.workYears, positionInfo.workYears) &&
        Objects.equals(this.creator, positionInfo.creator);
  }

  @Override
  public int hashCode() {
    return Objects.hash(id, vendorRecommendCount, salary, number, lastUpdated, degree, location, datePublished, name, principal, detail, startDate, status, dateCreated, type, weChatPositionType, enterpriseName, workYears, creator);
  }

  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class PositionInfo {\n");
    
    sb.append("    id: ").append(toIndentedString(id)).append("\n");
    sb.append("    vendorRecommendCount: ").append(toIndentedString(vendorRecommendCount)).append("\n");
    sb.append("    salary: ").append(toIndentedString(salary)).append("\n");
    sb.append("    number: ").append(toIndentedString(number)).append("\n");
    sb.append("    lastUpdated: ").append(toIndentedString(lastUpdated)).append("\n");
    sb.append("    degree: ").append(toIndentedString(degree)).append("\n");
    sb.append("    location: ").append(toIndentedString(location)).append("\n");
    sb.append("    datePublished: ").append(toIndentedString(datePublished)).append("\n");
    sb.append("    name: ").append(toIndentedString(name)).append("\n");
    sb.append("    principal: ").append(toIndentedString(principal)).append("\n");
    sb.append("    detail: ").append(toIndentedString(detail)).append("\n");
    sb.append("    startDate: ").append(toIndentedString(startDate)).append("\n");
    sb.append("    status: ").append(toIndentedString(status)).append("\n");
    sb.append("    dateCreated: ").append(toIndentedString(dateCreated)).append("\n");
    sb.append("    type: ").append(toIndentedString(type)).append("\n");
    sb.append("    weChatPositionType: ").append(toIndentedString(weChatPositionType)).append("\n");
    sb.append("    enterpriseName: ").append(toIndentedString(enterpriseName)).append("\n");
    sb.append("    workYears: ").append(toIndentedString(workYears)).append("\n");
    sb.append("    creator: ").append(toIndentedString(creator)).append("\n");
    sb.append("}");
    return sb.toString();
  }

  /**
   * Convert the given object to string with each line indented by 4 spaces
   * (except the first line).
   */
  private String toIndentedString(java.lang.Object o) {
    if (o == null) {
      return "null";
    }
    return o.toString().replace("\n", "\n    ");
  }
}
